package com.cskaoyan.day5.deque._02_api;

import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author Common-zhou
 * @since 2023-03-03 11:01
 */
public class Demo2 {
    public static void main(String[] args) {
        // ------------- 作为双端队列
        //        boolean offerFirst(E e)：  从第一个位置插入指定元素
        //        boolean offerLast(E e)： 从最后一个位置插入指定元素
        //        E peekFirst()： 获取但是不移除第一个元素，如果列表为空，返回null
        //        E peekLast()： 获取但是不移除最后一个元素，如果列表为空，返回null
        //        E pollFirst()： 从第一个位置移除元素
        //        E pollLast()： 从最后一个位置移除元素，如果列表为空，返回null

        // 队头                   队尾
        //test1();

        // 使用双端队列 模拟队列
        //test2();

        //test3();

        test4();

        test5();


    }

    private static void test5() {
        Deque<String> deque = new ArrayDeque<>();

        //

    }

    /**
     * 使用Deque模拟栈。
     * 只要保证 从一端进，从同一端出
     * 自己练习一下另外一种方式
     */
    private static void test4() {
        //
        //Stack<String> strings = new Stack<>();
        // Last in first Out


        // 模拟栈， 怎么模拟
        // 从一端进，从同一端出
        Deque<String> stack = new ArrayDeque<String>();

        stack.offerFirst("zs");
        stack.offerFirst("ls");
        stack.offerFirst("wu");

        //   队头                   队尾
        //      wu   ls   zs
        System.out.println(stack.pollFirst());
        System.out.println(stack.pollFirst());
        System.out.println(stack.pollFirst());


    }

    private static void test3() {

        Deque<String> deque = new ArrayDeque<>();

        deque.addLast("章鱼哥");
        deque.addLast("飞哥");
        deque.addLast("iwei");

        System.out.println(deque.removeFirst());
        System.out.println(deque.removeFirst());
        System.out.println(deque.removeFirst());

    }

    /**
     * 使用deque去模拟队列的两种方式
     * 1.从队尾进，从队头出
     * 2.从队头进，从队尾出
     */
    private static void test2() {
        Deque<String> deque = new ArrayDeque<>();

        // 队列有什么特点： 从一端进，从另外一端出
        // 1.从队尾进，从队头出

        deque.offerLast("zs");
        deque.offerLast("ls");
        deque.offerLast("wu");

        // 结果是  zs   ls   wu
        System.out.println(deque.pollFirst());
        System.out.println(deque.pollFirst());
        System.out.println(deque.pollFirst());

        System.out.println("===========================");

        // 从队头进，从队尾出
        Deque<String> deque1 = new ArrayDeque<>();
        deque1.offerFirst("飞哥");
        deque1.offerFirst("iwei");
        deque1.offerFirst("喜鹊");

        //  飞哥  iwei    喜鹊
        System.out.println(deque1.pollLast());
        System.out.println(deque1.pollLast());
        System.out.println(deque1.pollLast());


    }

    private static void test1() {
        Deque<String> deque = new ArrayDeque<>();

        deque.offerLast("zs");
        deque.offerLast("ls");
        deque.offerLast("wu");

        // 队头      队尾
        // zs     ls     wu

        System.out.println(deque.peekFirst());
        System.out.println(deque.peekLast());


    }
}
